//模拟实现 lodash 中的 curry方法
//const _ = require('lodash');

function curry (func) {
    return function curriedFn(...args) {     //获取实参的数组
        // 判断实参和形参的个数
        if(args.length < func.length) { //func.length  获取形参的个数
            return function () {    //返回获取剩余参数的函数
                //递归调用curriedFn  arguments是一个伪数组，需要用Array.from转换成数组
                return curriedFn(...args.concat(Array.from(arguments)));    
            }
        }  
        return func(...args);       //ES6中展开实参数组传递  此处也可以用apply
    }
}

function getSum (a, b, c) {
    return a + b + c;
}

const curried = curry(getSum);

//传递全部参数则直接执行
console.log(curried(1, 2, 3));
//传递部分参数则会返回一个函数用于接收剩余参数
console.log(curried(1)(2, 3));
//可以将任意多参数的函数转化为最终的一元函数
console.log(curried(1, 2)(3));